class JSONPipeline:
    # 初始化方法，以写方式打开recruit.json文件
    def __init__(self):
        self.json_file = open("D:/scrapy/recruit.json", 'w')
 
    def process_item(self, item, spider):
        # spider 每yield一次，此函数就会执行一次；
        # print("得到的数据:", item)
 
        # item对象转为字典
        item = dict(item)
 
        # 将yield过来的数据写入到json文件，将数据序列化，进行换行
        price_json = json.dumps(item, ensure_ascii=False) + '\n'
 
        # 写入job.json文件内
        self.json_file.write(price_json)
        return item
 
    # 当对象将被删除前，关闭recruit.json文件
    def __del__(self):
        self.json_file.close()
 
 
class MySQLPipeline:
    # 初始化方法，以写方式打开recruit.json文件
    def __init__(self):
        # 1.建立数据库连接
        self.connect = pymysql.connect(
            # MySQL数据库的IP地址，默认127.0.0.1（代表本地）
            host='127.0.0.1',
            # MySQL数据库的用户名
            user='root',
            # MySQL数据库的密码
            password='admin+123',
            # MySQL数据库服务的端口号；默认为3306
            port=3306,
            # 数据库名称
            db='spider',
            # 字符编码
            charset='utf8'
        )
 
    def process_item(self, item, spider):
        # spider 每yield一次，此函数就会执行一次；
        # print("得到的数据:", item)
        values = (
            item['recruit_name'],
            item['salary_down'],
            item['salary_up'],
            item['work_city'],
            item['quantity'],
            item['release_time'],
            item['company'],
            item['requirement'],
            item['skill']
        )
        sql = 'INSERT INTO recruits(name,salary_down,salary_up,work_city,quantity,' \
              'release_time,company,requirement,skill) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s)'
        cursor = self.connect.cursor()
        try:
            # 执行sql语句
            cursor.execute(sql, values)
        except:
            # 发生异常，回滚
            self.connect.rollback()
 
        return item
 
    # 当对象将被删除前，执行的数据库操作
    def __del__(self):
        # 提交到数据库执行并关闭数据库连接
        self.connect.commit()
        self.connect.close()
